package c14Annotation;

import java.lang.annotation.Annotation;
import java.util.Iterator;

//Annotation的定义很像接口定义！
//没有成员变量的Annotation又叫标记Annotation。
@interface SignalAn {
}

//有成员变量的叫元数据Annotation。
@interface MetaAn {
	int x = 1;//虽然没错，但是成员变量应该定义为如下这种无参方法：

	public int i();//修饰符只能是public、abstract或不写！

	//	private int i2();//编译错误！
	int j() default 0;//定义时也可以指定默认值！如果定义了默认值，使用时赋不赋值都可以；否则，必须赋值！
}

public class 定义Annotation {

	@SignalAn
	@MetaAn(i = 0, j = 1)
	public void m() {

	}

	public static void main(String[] args) throws NoSuchMethodException, SecurityException, ClassNotFoundException {
		定义Annotation test = new 定义Annotation();
		Annotation[] ans = test.getClass().getMethod("m").getAnnotations();
		for (Annotation an : ans) {
			System.err.println(an);
			if (an instanceof MetaAn) {
				MetaAn ma = (MetaAn) an;
				System.err.println("MetaAn-x:" + ma.x);
				System.err.println("MetaAn-i:" + ma.i());
				System.err.println("MetaAn-j:" + ma.j());
				System.err.println();
			}
		}
	}

}
